
//
// torrent client request
//
@protocol TorrentClientRequest<NSObject>

//
// get error
//
- (NSError*)error;

@end

//
// get torrent list request
//
@protocol GetTorrentDownloadListRequest<TorrentClientRequest>

//
// torrent list
//
- (NSArray*)torrentList;

//
// download rate
//
- (uint64_t)downloadRate;

//
// upload rate
//
- (uint64_t)uploadRate;

//
// total size
//
- (uint64_t)totalSize;

@end

//
// torrent client
//
@protocol TorrentClient<NSObject>

//
// finish callback
//
typedef void (^TorrentClientFinishCallback)(id<TorrentClientRequest>);

//
// get server info
//
- (ServerInfo*)serverInfo;

//
// set server info
//
- (void)setServerInfo:(ServerInfo*)serverInfo;

//
// add torrent link
//
- (void)addTorrent:(NSString*)torrentAddress autoStart:(BOOL)autoStart callback:(TorrentClientFinishCallback)callback;

//
// get torrent list
//
- (void)getTorrentListWithCallback:(TorrentClientFinishCallback)callback;

//
// start torrent
//
- (void)startTorrent:(TorrentDownloadItem*)torrentInfo callback:(TorrentClientFinishCallback)callback;

//
// pause torrent
//
- (void)pauseTorrent:(TorrentDownloadItem*)torrentInfo callback:(TorrentClientFinishCallback)callback;

//
// stop torrent
//
- (void)stopTorrent:(TorrentDownloadItem*)torrentInfo callback:(TorrentClientFinishCallback)callback;

//
// recheck torrent
//
- (void)recheckTorrent:(TorrentDownloadItem*)torrentInfo callback:(TorrentClientFinishCallback)callback;

//
// remove torrent
//
- (void)removeTorrent:(TorrentDownloadItem*)torrentInfo eraseData:(BOOL)eraseData callback:(TorrentClientFinishCallback)callback;

@end
